# Тема 5. Концепции и классификация языков программирования

## Машинный язык

![](_src/1.jpg)

## Общая схема создания программ для компьютера

![](_src/2.jpg)

## Состав языка программирования

![](_src/3.jpg)

## Способы описания синтаксиса языка программирования

![](_src/4.jpg)
![](_src/5.jpg)

### Примеры РБНФ

![](_src/6.jpg)

## Критерии классификации языков программирования

![](_src/7.jpg)

### Уровень языка программирования

![](_src/8.jpg)
![](_src/9.jpg)

## Парадигмы программирования

![](_src/10.jpg)

### Императивное программирование

![](_src/11.jpg)

Условно работу императивной программы можно считать переводом памяти из
начального состояния Q0 в конечное Q1 посредством отображения, задаваемого программой Р.

только ветвление

### Структурное программирование

![](_src/12.jpg)

есть функции

#### Подпрограммы

![](_src/13.jpg)

### Появление объектно-ориентированного программирования

![](_src/14.jpg)

Объекты в ООП выполняют роль переменных в императивном программировании. Как известно, объекты должны описываться некоторым типом данных, такие объектные типы называются классами. Очень часто говорят, что объект – это экземпляр класса.

#### Основные принципы ООП: инкапсуляция

![](_src/15.jpg)

•объединение данных и методов по их обработке в объекте;
•разделение доступа к данным и методам.

#### Основные принципы ООП: наследование

![](_src/16.jpg)

Говорят, что дочерние классы расширяют родительские классы, добавляя новые поля или методы.

##### Простое и множественное наследование

![](_src/17.jpg)

При простом наследовании класс может иметь только одного родителя, а при множественном – двух и более.

#### Основные принципы ООП: полиморфизм

![](_src/18.jpg)

Под полиморфизмом в ООП понимают свойство объектов в иерархии наследования объявлять и реализовывать полиморфные методы – методы, имеющие одинаковое название и параметры – сигнатуру, но реализующие себя по-разному.

### Логическое программирование

![](_src/19.jpg)

Основой логического программирования является метод резолюций – раздел математической логики, изучающий методы доказательства правильности.

#### Программа на языке Пролог

![](_src/20.jpg)

Минимально программа на языке Пролог состоит из двух частей. Первая часть описывает факты и правила – предложения clauses. Вторая часть – раздел goal – цель – содержит единственную цель, которую надо попробовать доказать.

### Функциональное программирование

![](_src/21.jpg)

Первым функциональным языком программирования стал язык LISP, созданный в 1959 году. Впоследствии на основе этого языка появились другие языки программирования, такие как ML, Haskell, F#.

## Трансляция, компиляция и интерпретация 

![](_src/22.jpg)

### Компиляторы

![](_src/23.jpg)

### Интерпретаторы

![](_src/24.jpg)

#### Си++

![](_src/25.jpg)

C++ – универсальный язык программирования, используемый для разработки как системного, так и прикладного программного обеспечения. Однако слабая типизация, наличие большого количества правил по умолчанию, использование указателей и, в основном, ручное управление памятью не способствуют написанию высоконадежных больших прикладных приложений.

#### Java

![](_src/26.jpg)

Джава – это универсальный, компилируемый в байт код, интерпретируемый в виртуальной машине, строго типизированный, мультипарадигменный язык. Джава поддерживает императивное, структурное, объектно-ориентированное, функциональное программирование и иные парадигмы программирования.

#### C#

![](_src/27.jpg)


Си Шарп – это универсальный, компилируемый в байт код, строго типизированный, мультипарадигменный язык программирования. Си Шарп поддерживает императивное, структурное, объектно-ориентированное, функциональное программирование.

#### Python

![](_src/28.jpg)

Python – это универсальный, интерпретируемый, динамически типизированный, мультипарадигменный язык программирования. Пайтон поддерживает императивное, структурное, объектно-ориентированное, функциональное программирование и иные парадигмы программирования.

### Сравнение языков программирования

![](_src/29.jpg)

